# Наследование

Чтобы браузер при отображении документа понимал, что имеет дело с элементом форматирования, применяются теги. Общий вид тегов следующий:

```text
<тег атрибут1="значение1" атрибут2="значение2">
<тег атрибут1="значение1" атрибут2="значение2">...</тег>
```

Теги бывают двух видов — одиночные и парные. Одиночный тег используется самостоятельно, а парный может включать внутри себя другие теги (детей) или текст (тело тэга). У тегов могут быть различные атрибуты, которые разделяются между собой пробелом. Значение атрибута заключено в кавычки.

В этом задании вам предстоит реализовать упрощенную версию html тегов.

## main/java/exercise/Tag.java

## Задачи

* Создайте класс `Tag`, который описывает html тег. Реализуйте базовый класс так, чтобы он содержал в себе общую логику классов-наследников.

## main/java/exercise/SingleTag.java

## Задачи

* Создайте класс `SingleTag`, который наследуется от класса `Tag` и описывает одиночный html тег. Конструктор класса принимает два аргумента:

  * Имя тега в виде строки
  * Атрибуты тега, которые представлены словарём `Map` со строковыми ключами и значениями.

* В классе реализуйте публичный метод `toString()`, который возвращает текстовое представление тега в виде строки.

```java
Tag img = new SingleTag("img", Map.of("class", "v-10", "id", "wop"));
img.toString(); // "<img class="v-10" id="wop">
```

## main/java/exercise/PairedTag.java

## Задачи

* Создайте класс `PairedTag`, который наследуется от класса `Tag` и описывает парный html тег. Конструктор класса принимает четыре аргумента:

  * Имя тега в виде строки
  * Атрибуты тега, которые представлены словарём `Map` со строковыми ключами и значениями.
  * Тело тега, строка
  * Список `List` детей. В этом задании детьми могут быть только одиночные теги.

* В классе реализуйте публичный метод `toString()`, который возвращает текстовое представление тега в виде строки.

```java
Tag p = new PairedTag(
    "p",
    Map.of("id", "abc"),
    "Text paragraph",
    new ArrayList<Tag>()
);

p.toString(); // "<p id="abc">Text paragraph</p>"

Tag div = new PairedTag(
    "div",
    Map.of("class", "y-5"),
    "",
    List.of(
        new SingleTag("br", Map.of("id", "s")),
        new SingleTag("hr", Map.of("class", "a-5"))
    )
)

div.toString(); // "<div class="y-5"><br id="s"><hr class="a-5"></div>"
```
